Jackson Streaming API হলো Jackson লাইব্রেরির একটি গুরুত্বপূর্ণ ফিচার, যা আপনাকে বড় JSON ডেটা ফাইল বা স্ট্রিম প্রক্রিয়াকরণে সাহায্য করে। এটি অনেক বেশি মেমোরি কার্যকর এবং উচ্চ-গতিসম্পন্ন কারণ এটি ডেটাকে ইটারেটিভ পদ্ধতিতে প্রসেস করে। Jackson Streaming API দুটি প্রধান ক্লাস ব্যবহার করে:
- JsonParser (For Reading JSON)
- JsonGenerator (For Writing JSON)
1. JsonParser: JSON পড়ার জন্য
JsonParser একটি Pull API যা আপনাকে JSON ডেটা টোকেন বাই টোকেন পড়তে দেয়। এটি সাধারণত বড় JSON ডেটা প্রসেস করার সময় ব্যবহার করা হয়।
উদাহরণ: JsonParser দিয়ে JSON পড়া
import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonToken;
import java.io.File;
import java.io.IOException;
public class StreamingApiReadExample {
public static void main(String[] args) throws IOException {
File jsonFile = new File("data.json");
// Create a JsonParser instance
JsonFactory factory = new JsonFactory();
JsonParser parser = factory.createParser(jsonFile);
// Read JSON token by token
while (!parser.isClosed()) {
JsonToken token = parser.nextToken();
if (JsonToken.FIELD_NAME.equals(token)) {
String fieldName = parser.getCurrentName();
System.out.println("Field Name: " + fieldName);
token = parser.nextToken(); // Move to field value
if ("name".equals(fieldName)) {
String name = parser.getValueAsString();
System.out.println("Name: " + name);
} else if ("age".equals(fieldName)) {
int age = parser.getValueAsInt();
System.out.println("Age: " + age);
}
}
}
parser.close();
}
}
উদাহরণ JSON (data.json):
{
"name": "John Doe",
"age": 30
}
2. JsonGenerator: JSON লেখার জন্য
JsonGenerator একটি Push API যা আপনাকে টোকেন বাই টোকেন JSON ডেটা তৈরি করতে দেয়।
উদাহরণ: JsonGenerator দিয়ে JSON লেখা
import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonGenerator;
import java.io.File;
import java.io.IOException;
public class StreamingApiWriteExample {
public static void main(String[] args) throws IOException {
File jsonFile = new File("output.json");
// Create a JsonGenerator instance
JsonFactory factory = new JsonFactory();
JsonGenerator generator = factory.createGenerator(jsonFile, com.fasterxml.jackson.core.JsonEncoding.UTF8);
// Write JSON data
generator.writeStartObject(); // Start JSON object
generator.writeStringField("name", "Jane Doe");
generator.writeNumberField("age", 25);
generator.writeEndObject(); // End JSON object
generator.close();
System.out.println("JSON written to output.json");
}
}
লিখিত JSON (output.json):
{
"name": "Jane Doe",
"age": 25
}
3. বড় JSON ডেটার জন্য উপযোগিতা
যখন আপনি বড় JSON ডেটা (যেমন কয়েক GB আকারের ফাইল) নিয়ে কাজ করছেন, তখন পুরো JSON মেমোরিতে লোড করা ঝুঁকিপূর্ণ। Jackson Streaming API ব্যবহার করে আপনি JSON ডেটাকে টোকেন বাই টোকেন পড়তে বা লিখতে পারেন, যা মেমোরি সাশ্রয়ী এবং দ্রুততর।
4. ব্যবহার ক্ষেত্র
- Big Data Applications: বড় ডেটা ফাইল প্রসেসিং।
- Low Memory Environments: সীমিত মেমোরিতে JSON প্রসেস করা।
- Streaming Services: লাইভ ডেটা স্ট্রিম প্রসেসিং।
Jackson Streaming API একটি লাইটওয়েট এবং কার্যকরী পদ্ধতি বড় JSON ডেটা প্রসেস করার জন্য। এটি যখন ডেটার পুরোপুরি ডি-সিরিয়ালাইজ বা সিরিয়ালাইজ করার প্রয়োজন হয় না, তখন অত্যন্ত কার্যকর।
Jackson এর Streaming API এমন একটি কার্যকর টুল, যা পড়ার (parsing) এবং লেখার (generation) কাজগুলো সরাসরি JSON ডেটার উপর করে। এটি মূলত নিম্ন-লেভেল API, যেখানে আপনি JSON ডেটার উপর আরও বেশি নিয়ন্ত্রণ পান এবং এটি উচ্চ-লেভেল Data Binding বা Tree Model API থেকে আরও দ্রুত কাজ করে। এটি বিশেষভাবে কার্যকর, যখন আপনি খুব বড় JSON ফাইল নিয়ে কাজ করছেন এবং মেমোরি দক্ষতার প্রয়োজন।
Streaming API-এর মূল উপাদানসমূহ
- JsonParser:
- JSON ডেটা পড়ার জন্য ব্যবহার হয়।
- এটি একটি "pull-based" API, যেখানে ডেটা একবারে একটি করে টোকেন হিসেবে প্রসেস হয়।
- JsonGenerator:
- JSON ডেটা লেখার জন্য ব্যবহার হয়।
- এটি একটি "push-based" API, যেখানে ডেটা ম্যানুয়ালি JSON আউটপুটে লেখা হয়।
JsonParser দিয়ে JSON পড়ার উদাহরণ
কোড:
import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonToken;
import java.io.File;
import java.io.IOException;
public class StreamingReadExample {
public static void main(String[] args) {
try {
// JSON ফাইল বা স্ট্রিম থেকে JsonParser তৈরি
JsonFactory factory = new JsonFactory();
JsonParser parser = factory.createParser(new File("data.json"));
// JSON ফাইল পঠনের লজিক
while (!parser.isClosed()) {
JsonToken token = parser.nextToken(); // পরবর্তী টোকেন পড়ুন
if (token == null) {
break;
}
// ফিল্ডের নাম চেক করুন
if (JsonToken.FIELD_NAME.equals(token)) {
String fieldName = parser.getCurrentName();
System.out.println("Field Name: " + fieldName);
// ফিল্ডের ভ্যালু পড়ুন
token = parser.nextToken();
if (JsonToken.VALUE_STRING.equals(token)) {
System.out.println("Value: " + parser.getValueAsString());
} else if (JsonToken.VALUE_NUMBER_INT.equals(token)) {
System.out.println("Value: " + parser.getValueAsInt());
}
}
}
parser.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
উদাহরণ data.json ফাইল:
{
"id": 1,
"name": "Rahim",
"age": 25
}
আউটপুট:
Field Name: id
Value: 1
Field Name: name
Value: Rahim
Field Name: age
Value: 25
JsonGenerator দিয়ে JSON লেখার উদাহরণ
কোড:
import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonGenerator;
import java.io.File;
import java.io.IOException;
public class StreamingWriteExample {
public static void main(String[] args) {
try {
// JsonGenerator তৈরি
JsonFactory factory = new JsonFactory();
JsonGenerator generator = factory.createGenerator(new File("output.json"), JsonGenerator.Feature.AUTO_CLOSE_TARGET);
// JSON লেখার লজিক
generator.writeStartObject(); // Start JSON Object
generator.writeNumberField("id", 1); // একটি নাম্বার ফিল্ড লিখুন
generator.writeStringField("name", "Rahim"); // একটি স্ট্রিং ফিল্ড লিখুন
generator.writeNumberField("age", 25); // একটি নাম্বার ফিল্ড লিখুন
generator.writeEndObject(); // End JSON Object
generator.close(); // JsonGenerator বন্ধ করুন
} catch (IOException e) {
e.printStackTrace();
}
}
}
আউটপুট ফাইল (output.json):
{
"id": 1,
"name": "Rahim",
"age": 25
}
Streaming API-এর সুবিধা
- মেমোরি দক্ষতা:
- পুরো JSON ডেটা একবারে মেমোরিতে লোড না করে, টুকরো টুকরো ডেটা প্রসেস করা হয়।
- বিশেষভাবে উপযোগী যখন JSON ডেটা খুব বড় হয়।
- দ্রুততা:
- Data Binding বা Tree Model API থেকে দ্রুততর কারণ এটি সরাসরি JSON টোকেনের সাথে কাজ করে।
- লাইটওয়েট প্রসেসিং:
- আপনি শুধুমাত্র প্রয়োজনীয় ডেটা প্রসেস করতে পারবেন এবং অপ্রয়োজনীয় অংশ এড়িয়ে যেতে পারবেন।
Streaming API বনাম Data Binding API
| বৈশিষ্ট্য | Streaming API | Data Binding API |
|---|---|---|
| ডেটা প্রসেসিং | নিম্ন-লেভেল টোকেন ভিত্তিক | উচ্চ-লেভেল Object ভিত্তিক |
| মেমোরি ব্যবহারে দক্ষতা | খুব বেশি | তুলনামূলক কম |
| পাঠযোগ্যতা | জটিল | সহজ |
| পারফরম্যান্স | খুব দ্রুত | তুলনামূলক কম |
Jackson-এর Streaming API বিশেষত বড় JSON ডেটা বা স্ট্রিমড ডেটা প্রসেস করার জন্য আদর্শ। তবে, যদি আপনি সহজ এবং দ্রুত ডেভেলপমেন্ট চান, তবে Data Binding API বেশি কার্যকর হতে পারে।
Jackson-এর JsonParser এবং JsonGenerator API আপনাকে JSON ডেটার উপর লো-লেভেল স্ট্রিমিং প্রসেসিং করার ক্ষমতা দেয়। এগুলি ব্যবহার করে আপনি খুব কার্যকরীভাবে JSON ডেটা পড়তে এবং লিখতে পারেন।
JsonParser
JsonParser ব্যবহার করে JSON ডেটা স্ট্রিম হিসাবে পড়া হয়। এটি ইভেন্ট-বেসড পদ্ধতিতে কাজ করে এবং আপনাকে JSON ডেটার প্রতিটি টোকেন সম্পর্কে জানায়।
JsonParser উদাহরণ
JSON থেকে ডেটা পড়ার জন্য JsonParser ব্যবহার:
import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonToken;
import java.io.IOException;
public class JsonParserExample {
public static void main(String[] args) throws IOException {
String json = """
{
"name": "John Doe",
"age": 30,
"address": {
"city": "Dhaka",
"country": "Bangladesh"
}
}
""";
// Create JsonParser instance
JsonFactory factory = new JsonFactory();
JsonParser parser = factory.createParser(json);
// Parse JSON
while (!parser.isClosed()) {
JsonToken token = parser.nextToken();
if (token == null) break;
switch (token) {
case FIELD_NAME -> {
String fieldName = parser.getCurrentName();
System.out.print("Field: " + fieldName + " -> ");
}
case VALUE_STRING -> {
String value = parser.getValueAsString();
System.out.println("String Value: " + value);
}
case VALUE_NUMBER_INT -> {
int value = parser.getValueAsInt();
System.out.println("Integer Value: " + value);
}
default -> {}
}
}
parser.close();
}
}
Output
Field: name -> String Value: John Doe
Field: age -> Integer Value: 30
Field: address ->
Field: city -> String Value: Dhaka
Field: country -> String Value: Bangladesh
JsonGenerator
JsonGenerator ব্যবহার করে JSON ডেটা লেখা হয়। এটি ইভেন্ট-বেসড পদ্ধতিতে JSON ডেটা নির্মাণ করতে সাহায্য করে।
JsonGenerator উদাহরণ
JSON ডেটা তৈরি করার জন্য JsonGenerator ব্যবহার:
import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonGenerator;
import java.io.IOException;
import java.io.StringWriter;
public class JsonGeneratorExample {
public static void main(String[] args) throws IOException {
StringWriter writer = new StringWriter();
// Create JsonGenerator instance
JsonFactory factory = new JsonFactory();
JsonGenerator generator = factory.createGenerator(writer);
// Start writing JSON
generator.writeStartObject(); // {
generator.writeStringField("name", "John Doe"); // "name": "John Doe"
generator.writeNumberField("age", 30); // "age": 30
generator.writeFieldName("address"); // "address":
generator.writeStartObject(); // {
generator.writeStringField("city", "Dhaka"); // "city": "Dhaka"
generator.writeStringField("country", "Bangladesh"); // "country": "Bangladesh"
generator.writeEndObject(); // }
generator.writeEndObject(); // }
generator.close();
// Print the JSON output
System.out.println(writer.toString());
}
}
Output
{
"name": "John Doe",
"age": 30,
"address": {
"city": "Dhaka",
"country": "Bangladesh"
}
}
JsonParser এবং JsonGenerator-এর ব্যবহার ক্ষেত্র
JsonParser-এর ব্যবহার ক্ষেত্র:
- বড় JSON ডেটা: স্ট্রিমিং পদ্ধতিতে ডেটা পড়ার জন্য কার্যকর।
- স্মৃতি (Memory) ব্যবস্থাপনা: লার্জ JSON ডেটা লোড না করেই পড়ার সুবিধা।
- ডেটা প্রসেসিং: JSON ডেটা থেকে নির্দিষ্ট অংশ বের করে প্রক্রিয়া করা।
JsonGenerator-এর ব্যবহার ক্ষেত্র:
- কাস্টম JSON তৈরি: জটিল JSON ডেটা ম্যানুয়ালি লেখার জন্য।
- বড় JSON ডেটা তৈরি: স্ট্রিমিং পদ্ধতিতে ডেটা লেখা।
- ডেটা স্ট্রাকচার থেকে JSON নির্মাণ: Nested Objects এবং Custom Logic প্রয়োগ করে JSON তৈরি করা।
JsonParser এবং JsonGenerator ব্যবহার করার সুবিধা
- High Performance: স্ট্রিমিং পদ্ধতির কারণে কার্যকারিতা বেশি।
- Low Memory Footprint: সম্পূর্ণ JSON মেমোরিতে লোড না করেও কাজ করা সম্ভব।
- Flexibility: Custom Logic প্রয়োগ করে JSON ডেটা পড়া ও লেখা সহজ।
এই টেকনিকগুলি তখনই সবচেয়ে কার্যকর যখন আপনি বড় JSON ডেটা নিয়ে কাজ করছেন এবং JSON ডেটার সাথে বিশেষ ধরনের প্রক্রিয়া সম্পন্ন করতে চান।
বড় JSON ফাইল নিয়ে কাজ করার সময় মেমোরি ব্যবস্থাপনা, পারফরম্যান্স এবং স্কেলেবিলিটি গুরুত্বপূর্ণ হয়ে ওঠে। Jackson Streaming API বড় JSON ডেটা প্রসেস করার জন্য একটি দক্ষ এবং মেমোরি-সাশ্রয়ী পদ্ধতি সরবরাহ করে। এটি পুরো JSON ডেটা মেমোরিতে লোড না করে event-driven parsing এর মাধ্যমে কাজ করে, যা বিশেষত বড় ডেটাসেটের ক্ষেত্রে কার্যকর।
Streaming API কিভাবে কাজ করে?
Jackson এর Streaming API মূলত দুইটি গুরুত্বপূর্ণ ইন্টারফেস ব্যবহার করে:
- JsonParser: JSON ডেটা read করতে ব্যবহৃত হয়।
- JsonGenerator: JSON ডেটা write করতে ব্যবহৃত হয়।
Streaming API এর বৈশিষ্ট্য
- Low Memory Consumption: ডেটা একটি ইভেন্ট হিসাবে প্রসেস করা হয়, ফলে বড় JSON ফাইল লোড করার প্রয়োজন হয় না।
- High Performance: মেমোরি কম ব্যবহার করে দ্রুত ডেটা প্রসেস করতে সক্ষম।
- Fine-Grained Control: JSON ডেটার প্রতিটি ইভেন্ট (যেমন, START_OBJECT, FIELD_NAME, VALUE_STRING) আলাদাভাবে হ্যান্ডল করা যায়।
- Forward-Only Parsing: ডেটা একবার প্রসেস করলে পুনরায় ব্যাক করা সম্ভব নয়।
উদাহরণ: Large JSON Read করার জন্য JsonParser
নিচের উদাহরণটি একটি বড় JSON ফাইল থেকে নির্দিষ্ট ডেটা প্রসেস করার পদ্ধতি দেখায়:
import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonToken;
import java.io.File;
import java.io.IOException;
public class StreamingApiExample {
public static void main(String[] args) {
try {
JsonFactory factory = new JsonFactory();
JsonParser parser = factory.createParser(new File("large_file.json"));
while (!parser.isClosed()) {
JsonToken token = parser.nextToken();
if (token == JsonToken.FIELD_NAME && "name".equals(parser.getCurrentName())) {
parser.nextToken(); // Move to the value
String name = parser.getValueAsString();
System.out.println("Name: " + name);
}
}
parser.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
কোডের ব্যাখ্যা:
- JsonFactory: একটি JSON parser তৈরি করে।
- JsonParser: ফাইলটি streaming mode-এ প্রসেস করে।
- JsonToken: JSON ডেটার প্রতিটি টোকেন (যেমন START_OBJECT, END_OBJECT, FIELD_NAME) সনাক্ত করে।
- Conditional Processing: নির্দিষ্ট ফিল্ড (যেমন "name") খুঁজে তার মান প্রসেস করা হয়।
উদাহরণ: Large JSON Write করার জন্য JsonGenerator
নিচের উদাহরণটি একটি বড় JSON ফাইল তৈরি বা লেখার পদ্ধতি দেখায়:
import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonGenerator;
import java.io.File;
import java.io.IOException;
public class StreamingApiWriteExample {
public static void main(String[] args) {
try {
JsonFactory factory = new JsonFactory();
JsonGenerator generator = factory.createGenerator(new File("output.json"));
generator.writeStartObject(); // Start JSON Object
generator.writeStringField("name", "Jackson");
generator.writeNumberField("age", 30);
generator.writeArrayFieldStart("skills");
generator.writeString("Java");
generator.writeString("JSON");
generator.writeEndArray(); // End array
generator.writeEndObject(); // End JSON Object
generator.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
কোডের ব্যাখ্যা:
- JsonGenerator: JSON ডেটা স্ট্রিম হিসাবে লেখার জন্য ব্যবহৃত।
- writeStartObject/writeEndObject: JSON অবজেক্টের শুরু এবং শেষ নির্ধারণ করে।
- writeArrayFieldStart/writeEndArray: JSON অ্যারে লেখার জন্য ব্যবহৃত।
কেন Streaming API ব্যবহার করবেন?
- বড় JSON ফাইল:
- যদি JSON ডেটা কয়েক GB বা তার বেশি হয়, এটি পুরোপুরি মেমোরিতে লোড করলে
OutOfMemoryErrorহতে পারে। Streaming API মেমোরি-সাশ্রয়ী সমাধান দেয়।
- যদি JSON ডেটা কয়েক GB বা তার বেশি হয়, এটি পুরোপুরি মেমোরিতে লোড করলে
- রিয়েল-টাইম প্রসেসিং:
- স্ট্রিমিং অ্যাপ্লিকেশন বা log processing-এর ক্ষেত্রে ডেটা ধীরে ধীরে প্রসেস করা হয়।
- পারফরম্যান্স:
- প্রচলিত ObjectMapper পদ্ধতির চেয়ে এটি দ্রুত, কারণ এটি ডেটাকে সরাসরি স্ট্রিম করে প্রসেস করে।
Streaming API বনাম ObjectMapper
| বৈশিষ্ট্য | Streaming API | ObjectMapper |
|---|---|---|
| মেমোরি ব্যবস্থাপনা | কম মেমোরি ব্যবহার করে। | পুরো ডেটা মেমোরিতে লোড করে। |
| পারফরম্যান্স | দ্রুত এবং স্কেলেবল। | ছোট JSON ফাইলের জন্য কার্যকর। |
| কাস্টমাইজেশন | বিস্তারিত এবং নিয়ন্ত্রণযোগ্য। | সহজ এবং ডিফল্ট কনফিগারেশন। |
| ইউজার-ফ্রেন্ডলি | ব্যবহার জটিল। | ব্যবহার সহজ। |
Streaming API ব্যবহার করার উপযোগিতা
- বড় JSON ফাইল: কম মেমোরি ব্যবহার করে দ্রুত প্রসেস করা।
- ডেটা ফিল্টারিং: পুরো JSON না পড়ে নির্দিষ্ট ফিল্ড পড়া বা লেখার সুবিধা।
- স্ট্রিম ডেটা প্রসেসিং: লাইভ ডেটা প্রসেস করার জন্য উপযুক্ত।
Jackson এর Streaming API বড় JSON ফাইল বা লাইভ ডেটা প্রসেস করার জন্য একটি চমৎকার সমাধান। এটি মেমোরি সাশ্রয়ী এবং উচ্চ পারফরম্যান্স নিশ্চিত করে।
Jackson Streaming API JSON ডেটা প্রসেসিংয়ের জন্য একটি লো-লেভেল এবং মেমরি-অপ্টিমাইজড পদ্ধতি প্রদান করে। এটি বিশেষভাবে উপযোগী যখন ডেটাসেট খুব বড় হয় বা লো-লেভেল কন্ট্রোল প্রয়োজন হয়।
Streaming API কেন ব্যবহার করবেন?
- লাইটওয়েট এবং দ্রুত: Streaming API, DOM এবং Data Binding পদ্ধতির তুলনায় দ্রুত কারণ এটি মেমোরিতে সম্পূর্ণ JSON লোড না করে একটি স্ট্রিম হিসেবে JSON প্রসেস করে।
- মেমরি অপ্টিমাইজড: বড় JSON ফাইল নিয়ে কাজ করার সময় মেমরি খরচ কম হয়।
- Partial Processing: পুরো JSON প্রসেস করার প্রয়োজন না হলে নির্দিষ্ট অংশ পড়তে বা লিখতে সুবিধা হয়।
1. Streaming API: দুটি প্রধান অংশ
(a) JsonParser: JSON ডেটা পড়ার জন্য।
(b) JsonGenerator: JSON ডেটা লেখার জন্য।
2. উদাহরণ: JsonParser দিয়ে JSON পড়া
নিচে একটি উদাহরণ দেওয়া হলো যেখানে Streaming API ব্যবহার করে JSON ডেটা পার্স করা হয়েছে।
import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonToken;
import java.io.File;
import java.io.IOException;
public class JacksonStreamingReadExample {
public static void main(String[] args) {
JsonFactory jsonFactory = new JsonFactory();
try (JsonParser parser = jsonFactory.createParser(new File("data.json"))) {
while (!parser.isClosed()) {
JsonToken token = parser.nextToken();
if (token == null) {
break;
}
if (JsonToken.FIELD_NAME.equals(token)) {
String fieldName = parser.getCurrentName();
parser.nextToken(); // Move to the value
if ("name".equals(fieldName)) {
System.out.println("Name: " + parser.getValueAsString());
} else if ("age".equals(fieldName)) {
System.out.println("Age: " + parser.getValueAsInt());
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
JSON ইনপুট (data.json):
{
"name": "John Doe",
"age": 30,
"address": {
"street": "123 Main St",
"city": "Dhaka"
}
}
আউটপুট:
Name: John Doe
Age: 30
3. উদাহরণ: JsonGenerator দিয়ে JSON লেখা
নিচে একটি উদাহরণ দেওয়া হলো যেখানে Streaming API ব্যবহার করে JSON ডেটা তৈরি করা হয়েছে।
import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonGenerator;
import java.io.File;
import java.io.IOException;
public class JacksonStreamingWriteExample {
public static void main(String[] args) {
JsonFactory jsonFactory = new JsonFactory();
try (JsonGenerator generator = jsonFactory.createGenerator(new File("output.json"))) {
generator.writeStartObject(); // Start JSON Object
generator.writeStringField("name", "John Doe");
generator.writeNumberField("age", 30);
generator.writeFieldName("address");
generator.writeStartObject(); // Start nested object
generator.writeStringField("street", "123 Main St");
generator.writeStringField("city", "Dhaka");
generator.writeEndObject(); // End nested object
generator.writeEndObject(); // End JSON Object
} catch (IOException e) {
e.printStackTrace();
}
}
}
আউটপুট (output.json):
{
"name": "John Doe",
"age": 30,
"address": {
"street": "123 Main St",
"city": "Dhaka"
}
}
4. Performance Optimization টিপস
(a) Chunked Processing:
বড় JSON ফাইল সরাসরি মেমোরিতে না নিয়ে স্ট্রিম হিসেবে প্রসেস করুন।
try (JsonParser parser = jsonFactory.createParser(new File("large.json"))) {
while (parser.nextToken() != JsonToken.END_OBJECT) {
// শুধুমাত্র প্রয়োজনীয় ডেটা পড়ুন
}
}
(b) Avoid DOM-based Processing:
ObjectMapper দিয়ে পুরো JSON লোড না করে Streaming API ব্যবহার করুন।
(c) Lazy Loading:
জ্যাকসনের JsonParser মডেল ব্যবহার করলে প্রয়োজনীয় ডেটা Lazy Load করতে পারেন।
5. Use Cases
- Big Data Processing: বিশাল JSON ডেটা ফাইল প্রসেস করা।
- Low Memory Environments: সীমিত মেমরি ব্যবহার করে ডেটা পার্স করা।
- Partial Updates: JSON ফাইলের নির্দিষ্ট অংশ আপডেট করা।
6. সীমাবদ্ধতা
- কোড জটিলতা: Streaming API ব্যবহার করলে কোড কিছুটা জটিল হতে পারে।
- Manual Handling: প্রতিটি JSON টোকেন ম্যানুয়ালি প্রসেস করতে হয়।
Jackson Streaming API, বড় JSON ডেটা প্রসেসিং এবং মেমরি অপ্টিমাইজেশনের জন্য একটি শক্তিশালী টুল। তবে এটি ব্যবহারের জন্য লো-লেভেল লজিক লিখতে হয়। যদি আপনার ডেটাসেট বড় বা মেমরি সীমাবদ্ধতা থাকে, তবে এটি একটি আদর্শ সমাধান।
Read more